iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
生成式 AI

被AI之箭射中了 - 是覺醒還是死去系列 第 5

Day05 - MCP:請 Claude 幫我初探架構及原理

  • 分享至 

  • xImage
  •  

前言

... Claude 快用你無敵的白金之星想想辦法..

運作背後三大角色

MCP 運行背後圍繞著一個架構 (Client-Server Architecture),根據官方文件裡面主要有三個參與者:

  • MCP Host:負責管理多個 Client 跟 Server 交互的存在
  • MCP Client:將從 MCP server 獲取的上下文內容提供給 Host 使用
  • MCP Server:負責提供上下文給 Client 使用的伺服器

https://ithelp.ithome.com.tw/upload/images/20250919/20141272Dy5NDz9dBK.png

圖片擷取自: https://modelcontextprotocol.io/docs/learn/architecture

閱讀到這邊讓我產生了蠻多個問題:

  1. Host 有什麼條件嗎?
  2. Host 在過程擔任的角色是?
  3. Client 跟 Server 的通訊方式?

所以下面的內容會專注在解開上述的困惑

不是誰都能當 Host

先條列大家熟悉的 MCP Host :

  • AI 聊天應用程式(Claude Desktop)
  • IDE(VScode, Cursor)
  • AI Agent 平台

但重點還是它們為何能當 Host ,容我請 Claude 幫忙摘要 Host 基本功能:

- 實作 MCP 客戶端協議
    - 支援 JSON-RPC 2.0 通訊
    - 處理初始化握手
    - 管理連線生命週期
- **建立傳輸層連線**
    - stdio(標準輸入輸出)用於本地連線
    - HTTP/SSE 用於網路連線
    - WebSocket(如果支援)
- **具備呼叫 MCP 功能的能力**
    - 發送 `tools/list` 和 `tools/call` 請求
    - 處理 `resources/list` 和 `resources/read`
    - 管理 prompts 和其他原語

好,先大概理解就好,現在先讓我們回頭看看 Client 跟 Server 的部分

不是一般的 Client 跟 Server 互動方式

MCP Client 跟 Server 的連線與資源架構是基於 MCP Protocol 所規範,而這個協議主要分為兩個層次:

  • Transport Layer:基於 JSON-RPC 2.0 協議,定義了通訊的內容、訊息的結構
  • Data Layer:負責管理通訊機制(錯誤處理)、訊息框架、驗證等

Transport Layer

主要支援兩種模式:

stdio (標準輸入/輸出)

特點:

  • 用於本地進程間通訊
  • Host 啟動 Server 作為子進程
  • 透過標準輸入/輸出進行通訊
  • 適合本地開發和桌面應用程式
  • 最常用於 Claude Desktop 和本地 IDE

HTTP with SSE

特點:

  • 用於網路通訊
  • 支援遠端 MCP Server
  • 使用 SSE 進行伺服器推送
  • 適合 Web 應用和雲端服務

Data Layer

1.定義與角色

  • Data Layer 位於 Transport Layer 之上

  • 功能是定義 傳輸內容的格式與語意,確保不同 Host、Client、Server 在交換訊息時能彼此理解。

  • 協定基礎:JSON-RPC 2.0

    • JSON-RPC 提供「request-response」與「notification」模式。

    • 在 MCP 中,這些訊息會被拓展為「MCP primitives」。

2. 主要責任

  • Lifecycle management(生命週期管理)

    • 初始化連線(handshake / capability negotiation)

    • 關閉或重連的流程

  • Primitives 定義(MCP 核心能力)
    Data Layer 定義了一系列可被 client/server 呼叫的基本「積木」,包含:

    1. Tools

      • 可執行的動作(類似 API endpoint)。

      • 例:建立檔案、查詢資料庫、呼叫外部 API。

    2. Resources

      • 可存取的上下文資料。

      • 例:檔案系統內容、紀錄檔、設定檔。

    3. Prompts

      • 可重複使用的 prompt 模板(帶參數)。

      • 例:問答模板、翻譯模板。

  • Client primitives(由 client 提供的能力,讓 server 可以回呼)

    1. Sampling

      • Server 可以請求 host 的 LLM 進行推論補全。

      • 例:server 提供一個「翻譯工具」,但要靠 host 的 LLM 幫忙產生文字。

    2. Elicitation

      • Server 向使用者互動請求輸入。

      • 例:工具需要 API 金鑰時,彈窗讓使用者輸入。

    3. Logging

      • Server 可以傳送 log 給 host,用於 debug 或監控。

3. 運作模式

  • 一對一連線

    • 每個 server 會有一個獨立的 MCP client 實例。

    • 確保「上下文」與「primitives」只屬於該連線,不互相干擾。

  • 抽象化設計

    • Data Layer 不管傳輸用什麼(stdio 或 HTTP)。

    • 它只在意「格式與語意正確」,由 Transport Layer 負責資料送達。

以前端工程師的理解角度

可以把 Data Layer 類比成 前端框架的 API 介面層

  • Transport Layer = fetch / websocket → 負責傳送/接收資料。

  • Data Layer = axios interceptor / GraphQL schema → 負責定義資料格式與錯誤處理。

  • Tools / Resources / Prompts = 你呼叫的 API endpoint 或 hook。

小結

明天目標是由我本人探索 MCP 相關的資安問題!

那麼,明天見。

-- to be continued --


參考

MCP(模型上下文協定)是什麼?技術原理解析


上一篇
Day04 - MCP:LLM 的進化之箭
下一篇
Day06 - MCP:你使用的工具方法是安全的嗎?
系列文
被AI之箭射中了 - 是覺醒還是死去6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言